﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Drawing;
using System.Drawing.Printing;
using AdministracionCooperativa.entidades; 
using System.Text;

namespace AdministracionCooperativa.Controlador
{
    public class ImprimirTicket
    {
        private static int maximoCaracteres = 35;
        private static float posx = 10;
        private static float posy = 4;
        private static int numeroLinea = 1;
        private static Font tipoLetra = new Font("Courier New", 7);
        private static SolidBrush colorB = new SolidBrush(Color.Black);
        public static Graphics canva = null;
        
        public static void Imprimir(Graphics c, List<tblreg> entidades)
        {
            canva = c;
            var numerodeFolios = (from f in entidades select f.folio).Distinct().ToList();
            foreach (var item in numerodeFolios)
            {
                var i = entidades.Where(ce => ce.folio == item).Select(ce=>ce).ToList();
                    ImprimeCabecera();
                    tipoLetra = new Font("Courier New",10);
                    ImprimirLinea(item,0);
                    tipoLetra = new Font("Courier New", 7);
                    ImprimirLinea(" ", 1);
                    ImprimirLinea(" ", 1);
                    ImprimirLinea("Unidad: " + i[0].CATUNI_NUMUNI, 1,false);
                    ImprimirLinea("Fecha: " + i[0].FECHA.ToShortDateString(), 2);
                    ImprimirLinea("Fecha: " + i[0].SYSUSR_IDUSR, 1);
                    ImprimirLinea("______________", 1);
                    Detalle(i);
                    ImprimirLinea(" ", 1);
                    ImprimirLinea(" ", 1);
                    ImprimirLinea("****GRACIAS POR SU PAGO*****", 0);
            }
            
        }
        private static void ImprimeCabecera()
        {
            ImprimirLinea("Sociedad Cooperativa de Transporte",0);
            ImprimirLinea("Urbano y Sububano",0);
            ImprimirLinea(" ",1);
            ImprimirLinea(" ",1);
            
        }
        private static void Detalle(List<tblreg> entidades)
        {
            decimal total = 0.0M;
            foreach (var item in entidades)
	        {
		        ImprimirLinea("Cuota:"+item.FECHA.ToShortDateString(),1,false);
                var monto = ControlodarRegistroCouta.CalcularTotal(item);
                ImprimirLinea(monto.ToString("C"), 2);
                total += monto;
	        }
            ImprimirLinea("___________", 2);
            ImprimirLinea("TOTAL", 1,false);
            ImprimirLinea(total.ToString("C"), 2);

        }
        private static void ImprimirLinea(string texto, int orientacion, bool inc=true)
        {
            //var linea = CentrarTexto(texto);
            switch (orientacion)
            {
                case 1:
                    posx = 4;
                    break;
                case 2:
                    posx = 65-texto.Length;
                    break;
                default:
                    posx = 4+ (((maximoCaracteres - texto.Length) / 2) * 1.38f);
                    break;
            }
            canva.DrawString(texto, tipoLetra, colorB, posx+4, posy, new StringFormat());
            
            if (inc)
            {
                posy = numeroLinea * tipoLetra.GetHeight(canva) + 4;
                numeroLinea++;
            }
           
        }
        private static string AlinerTextoDerecha(int lenght)
        {
            string espacios = "";
            int spaces = maximoCaracteres - lenght;
            for (int x = 0; x < spaces; x++)
                espacios += " ";
            return espacios;
        }
        private static string CentrarTexto(string texto)
        {
            string resultado = "";
            var espacios = "";
            int spaces = (maximoCaracteres - texto.Length)/2;
            for (int x = 0; x < spaces; x++)
                espacios += " ";
            resultado = espacios + texto;
            return resultado;
        }
    }
}
